package com.cubomagicogoias.controllers.pessoa;

import java.io.IOException;

import com.cubomagicogoias.model.Pessoa;
import com.cubomagicogoias.site.Controler;
import com.google.appengine.api.mail.MailService;
import com.google.appengine.api.mail.MailService.Message;
import com.google.appengine.api.mail.MailServiceFactory;

public class Cadastro extends Controler {

	@Override
	public String execute() {

		Pessoa u;
		if (sessao.logged())
			u = dao.procuraPessoa(sessao.loginEmail());
		else
			u = new Pessoa();
		u.setNome(req.getParameter("nome"));
		sessao.set("cad.nome", req.getParameter("nome"));
		String sx = req.getParameter("sexo");
		sessao.set("cad.sexo", req.getParameter("sx"));
		String dn = req.getParameter("nascimento");
		sessao.set("cad.nascimento", req.getParameter("sx"));
		String email = req.getParameter("email");
		if (email == null)
			email = "";
		email = email.trim().toLowerCase().replaceAll("%40", "@");
		if (!sessao.logged())
			u.setEmail(email);
		sessao.set("cad.email", email);

		String senha1 = req.getParameter("senha1");
		String senha2 = req.getParameter("senha2");
		u.setWca(req.getParameter("wca"));
		sessao.set("cad.wca", req.getParameter("wca"));

		u.setEstado(req.getParameter("estado"));
		sessao.set("cad.estado", req.getParameter("estado"));

		if (u.getEstado() == null || "".equals(u.getEstado())) {
			sessao.setLastErrorMsg("Campo não preenchido: Estado");
			return "cadastro.page";
		}
		
		u.setPais(req.getParameter("pais"));
		sessao.set("cad.pais", req.getParameter("pais"));
		if (u.getPais() == null || "".equals(u.getPais())) {
			sessao.setLastErrorMsg("Campo não preenchido: Pais");
			return "cadastro.page";
		}		
		
		if ("M".equals(sx))
			u.setSexo('M');
		else if ("F".equals(sx))
			u.setSexo('F');
		else {
			sessao.setLastErrorMsg("Campo não preenchido: Sexo");
			return "cadastro.page";
		}
		try {
			u.setNascimento(dao.parseData(dn));
		} catch (Exception e) {
			sessao.setLastErrorMsg("Data de nascimento inválida: " + dn);
			return "cadastro.page";
		}

		if (senha1 == null || "".equals(senha1)) {
			if (sessao.logged())
				senha1 = null;
			else {
				sessao.setLastErrorMsg("Senha não pode ficar em branco");
				return "cadastro.page";
			}
		}

		if (senha1 != null) {
			if (!senha1.equals(senha2)) {
				sessao.setLastErrorMsg("Senha não confere. Redigite");
				return "cadastro.page";
			}
			int h = senha1.hashCode();
			if (sessao.logged())
				u.setSenha(h);
			else
				u.setSenha(h + 1);
		}

		if (!sessao.logged())
			if (dao.procuraPessoa(u.getEmail()) != null) {
				sessao.setLastErrorMsg("Este email já foi usado pra registrar uma conta");
				return "cadastro.page";
			}
		u.setConfirmado(false);
		dao.persist(u);

		if (sessao.logged())
			return "cadastro.page";

		try {
			enviaEmail(u);
		} catch (IOException e) {
			sessao.setLastErrorMsg("Não foi possível te enviar um email de confirmação");
			return "cadastro.page";
		}

		return "cadastroOk.page";
	}

	private void enviaEmail(Pessoa u) throws IOException {

		String url = "http://www.cubomagicogoias.com.br/site/pessoa.Confirma?email="
				+ u.getEmail() + "&chk=" + String.valueOf(u.getSenha() - 1);
		String texto = "Olá, seu cadastro no Cubo Mágico Goiás foi feito<br>"
				+ "<a href='" + url
				+ "'>Clique aqui</a>+ para confirmar o cadastro.<br>";

		Message msg = new Message();
		msg.setSender("cmg@cubomagicogoias.com.br");
		msg.setSubject("Confirmação de cadastro no Cubo Mágico Goías");
		msg.setTo(u.getEmail());
		msg.setHtmlBody(texto);

		MailService srv = MailServiceFactory.getMailService();
		srv.send(msg);
	}
}
